﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Data;

namespace ProjectA
{
    public class cFacturas
    {
        wsGeneral.WsGeneral wsGeneral;
        private float fPReteIva, fIva, fTotalFacturado, fPReteRenta, fPReteICA, fPAvance, fTotalCancelado, fTRM;
        private string sMoneda;

        public float TotalFacturadoNeto
        {
            get
            {
                if (TRM != 0)
                {
                    return TotalFacturado / TRM;
                }
                else
                {
                    return TotalFacturado;
                }
            }
        }

        public float TRM
        {
            get { return fTRM; }
            set
            {
                if (Moneda != "COP")
                {
                    fTotalFacturado = fTotalFacturado * value;
                }
                else
                {
                    if(fTRM!=0)
                        fTotalFacturado = fTotalFacturado / fTRM;
                }
               
                fTRM = value;
            }
        }

        public float TotalFacturado
        {
            get
            {
                return fTotalFacturado;
            }
            set
            {
                fTotalFacturado = value;
                if (Moneda != "COP")
                {
                    fTotalFacturado = fTotalFacturado * TRM;
                }
            }
        }

        public string Moneda
        {
            get { return sMoneda; }
            set
            {
                //if (value != "COP")
                //{
                //    fTotalFacturado = fTotalFacturado * TRM;
                //}
                //else
                //{
                //    fTotalFacturado = fTotalFacturado / TRM;
                //    TRM = 0;
                //}
                sMoneda = value;
            }
        }


        public bool IVADiferido { get; set; }

        public float IVA
        {
            get
            {
                return fIva;
            }
            set
            {
                fIva = value;
            }
        }

        public float PReteIva
        {
            get
            {
                return fPReteIva;
            }
            set
            {
                fPReteIva = value;
            }
        }

        public float ReteIva
        {
            get
            {
                return Convert.ToSingle((IVA / 100 * PReteIva), CultureInfo.InvariantCulture);
            }
        }

        public float PReteRenta
        {
            get
            {
                return fPReteRenta;
            }
            set
            {
                fPReteRenta = value;
            }
        }

        public float ReteRenta
        {
            get
            {
                return Convert.ToSingle((TotalFacturado / 100 * PReteRenta), CultureInfo.InvariantCulture);
            }
        }


        public float PReteICA
        {
            get
            {
                return fPReteICA;
            }
            set
            {
                fPReteICA = value;
            }
        }

        public float ReteICA
        {
            get
            {
                return Convert.ToSingle((TotalFacturado / 100 * PReteICA), CultureInfo.InvariantCulture);
            }
        }


        public float PAvance
        {
            get
            {
                return fPAvance;
            }
            set
            {
                fPAvance = value;
            }
        }

        public float Amortizacion
        {
            get
            {
                return Convert.ToSingle((TotalFacturado / 100 * PAvance), CultureInfo.InvariantCulture);
            }
        }

        public float TotalDescuentos
        {
            get
            {
                return ReteIva + ReteRenta + ReteICA + Amortizacion;
            }
        }

        public float TotalAPagar
        {
            get
            {
                if (IVADiferido)
                {
                    return TotalFacturado + IVA - TotalDescuentos;
                }
                else
                {
                    return TotalFacturado - TotalDescuentos;
                }
                
            }
        }

        public float TotalCancelado
        {
            get
            {
                return fTotalCancelado;
            }
            set
            {
                fTotalCancelado = value;
            }
        }

        public float PagarAProveedor
        {
            get
            {
                return TotalAPagar - TotalCancelado;
            }
        }

        public float OldTotalFacturado { get; set; }


        public int FiltroCentroID { get; set; }

        public int? FiltroNoFactura { get; set; }

        public int? FiltroNoOrden { get; set; }

        public int? FiltroCodigoUnicoConta { get; set; }

        public int? FiltroNoRadicacion { get; set; }

        public DateTime? FiltroFechaRadicacion { get; set; }

        public DateTime? FiltroFechaFactura{ get; set; }

        public int? FiltroDiasVencimiento { get; set; }

        public float? FiltroTRM { get; set; }

        public string FiltroMoneda { get; set; }

        public float? FiltroCostoTotalFactura{ get; set; }

        public float? FiltroIVA { get; set; }

        public float? FiltroPagarAProveedor { get; set; }

        public DateTime FiltroFechaInicial { get; set; }

        public DateTime FiltroFechaFinal { get; set; }

        public int? FiltroProveedorID
        {
            get;
            set;
        }

        public cFacturas()
        {
            Moneda = "COP";
            TotalFacturado = 0;
            PReteIva = 0;
            PReteRenta = 0;
            PReteICA = 0;
            PAvance = 0;
            IVA = 0;
            TotalCancelado = 0;
            FiltroCentroID = 0;
            FiltroNoFactura = null;
            FiltroNoOrden = null;
            FiltroCodigoUnicoConta = null;
            FiltroNoRadicacion = null;
            FiltroFechaRadicacion = null;
            FiltroFechaFactura = null;
            FiltroDiasVencimiento = null;
            FiltroTRM = null;
            FiltroCostoTotalFactura = null;
            FiltroIVA = null;
            FiltroPagarAProveedor = null;
            FiltroProveedorID = null;
        }

        public DataSet FiltarBusqueda()
        {
            string sErr = "";
            DataSet dsFacturas = new DataSet();
            DataSet dsPoSo= new DataSet();
            wsGeneral = new wsGeneral.WsGeneral();

            if (wsGeneral.GetRegistroFacturas(null, FiltroNoFactura, FiltroNoOrden, FiltroCentroID, FiltroCodigoUnicoConta, FiltroNoRadicacion, FiltroFechaRadicacion,
                null, FiltroFechaFactura, FiltroDiasVencimiento, FiltroTRM, FiltroMoneda, FiltroCostoTotalFactura, FiltroIVA,
                null, null, null, null, null, null, null, null, null, null, null, FiltroPagarAProveedor, FiltroFechaInicial, FiltroFechaFinal, FiltroProveedorID, out dsFacturas, out sErr))
            {
               
            }

            return dsFacturas;
        }

    }
}
